package day03;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@SuppressWarnings("all")
//会话管理技术
public class A05_会话技术 extends HttpServlet {
    /**
     * 1.什么是会话
     *      一次通话过程,  当打开浏览器之后,输入访问网站地址后,会话就开始了
     *      关闭浏览器或者到了过期时间,会话结束
     *      在会话期间可以进行多次的请求和响应
     *
     * 2.会话分类
     *   在javaee中会话管理分为两类:
     *   客户端会话管理技术(Cookie)
     *       将要共享的数据保存到了客户端(浏览器),每次请求都会
     *       把会话信息带到服务器上,能够实现多次请求数据的共享
     *
     *   服务端会话管理技术(HttpSession)
     *       本质还是客户端会话管理技术,只是在客户端保存一个特殊的
     *       标识,具有唯一性,将共享的数据保存到服务器的内存中,每次
     *       客户端浏览器请求的时候都会把这个特殊的标识带到服务器中
     *       找到对应的内存空间,实现数据共享
     * 3.Cookie 本地的缓存文件
     *      客户端浏览器的缓存文件,里面记录了客户端浏览器访问网站的一些内容,
     *      同时也是HTTP协议请求和响应头的一部分
     *      作用:提高访问效率
     *
     *     1).Cookie的属性:
     *     private final String name; cookie的名字
     *     private String value;      cookie的值
     *     private int version = 0;   cookie的版本
     *     private String comment;    cookie文档说明
     *     private String domain;     cookie的域名
     *     private int maxAge = -1;   cookie的生存时间
     *     private String path;       cookie的路径
     *
     *     2).特点:
     *     文本文件 有大小限制 最大不能超过4kb
     *     个数限制: 每个网站最多只能存20个cookie
     *      所有网站的cookie总数,不能够超过300个
     *
     *     3).构造方法:
     *         public Cookie(String name,String value)
     *
     *     4).限制:
     *           1). Cookie的名字只能包含ASCII表中的字母,数字字符
     *           不能有逗号,分号,空格,不能以$开头
     *           2). Cookie的值,不支持中文
     *     设置Cookie的存货时间 public void setMaxAge(int expiry)
     *     如果是正整数: 以秒为单位的存活时间
     *     如果是负整数:当前会话有效,浏览器关闭被清除
     *     0表示立即清除
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         *  案列: 通过Cookie记录最后的访问时间,并显示到浏览器上
         */
        resp.setContentType("text/html;charset=utf-8");
        //1.友好提示信息
        PrintWriter writer = resp.getWriter();
        writer.write("德玛西亚");
        //2.获取当前系统时间的毫秒值
        long l = System.currentTimeMillis();
        //3.创建Cookie对象  不能有中文
        Cookie cookie = new Cookie("time", l + "");
        //设置cookie的存活时间 秒  public void setMaxAge(int expiry)
        cookie.setMaxAge(100);
        //4.将cookie添加到响应对象中
        resp.addCookie(cookie);
        //5.获取所有的cookie对象
        Cookie[] cookies = req.getCookies();
        //6.遍历这个cookie数组  遍历数组两种方法for 和 增强for
        for (Cookie cook : cookies) {
            //判断  是否存储了时间的cookie
            if (cook.getName().equals("time")){
                String value = cook.getValue();
                //使用时间解析  讲一个毫秒值转换成yyyy-MM-dd HH:mm:ss格式的日期
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //将字符串转成long类型数据
                long time = Long.parseLong(value);
                Date date = new Date(time);
                String format = sdf.format(date);
                //这个就是时间
                System.out.println(format);
                //写出时间
                writer.write(format);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
    }
}
